package com.atguigu.gulimall.feign.cart;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gulimall.cart.entity.CartItem;
import com.atguigu.gulimall.cart.vo.AddCartSuccessVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * @author nicc
 * @version 1.0
 * @className CartFeignClient
 * @date 2022-10-17 09:25
 */
@RequestMapping("/api/inner/cart")
@FeignClient("service-cart")
public interface CartFeignClient {


    /**
     *
     * @param skuId
     * @param skuNum
     * @return
     *
     * 可以为每个方法加一个 Request.Options options 参数，代表这次请求的超时设置等
     *
     * 完整意思：
     * 1）、给 http://service-cart/api/inner/cart/add/60 发送请求
     * 2）、把 skuid 参数的值放到路径变量上
     * 3）、请求参数是 http://service-cart/api/inner/cart/add/60?skuNum=1
     * 4）、请求头有 userId；把userId放到请求头
     *
     * RequestTemplate 只封装 注解 标注的东西，老请求的请求头并不管
     */
    @GetMapping("/add/{skuId}")
    Result<AddCartSuccessVo> addToCart(@PathVariable("skuId") Long skuId,
                                       @RequestParam("skuNum") Integer skuNum);
    //每个请求都在方法参数上明确声明userid，tempId很麻烦


    /**
     * 删除购物车中选中的商品
     * @return
     */
    @GetMapping("/delete/checked")
    public Result deleteChecked();


    /**
     * 获取选中的商品列表
     * @return
     */
    @GetMapping("/checked/items")
    public Result<List<CartItem>> getCheckedCartItems();
}
